/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package opera.negocio;

import java.io.Serializable;
import opera.controle.Validar;
import opera.exceção.FichaInvalidaException;

/**
 * 
 * @author Macartur
 */
public class Ficha implements Serializable{
    private String personagem;
    private String jogador;
    private String campanha;
    private int experiencia;
    private String tipo;
    private int atributos[];
        
    
    public Ficha(String personagem, int experiencia, String tipo, int[] atributos) throws FichaInvalidaException {
        setPersonagem(personagem);
        setExperiencia(experiencia);
        setTipo(tipo);
        setAtributos(atributos);
    }
        
        
    public Ficha(String personagem, String jogador, String campanha, int experiencia, String tipo, int[] atributos) throws FichaInvalidaException {
        this(personagem, experiencia, tipo, atributos);
        setJogador(jogador);
        setCampanha(campanha);
    }
    
    
       

    public final void setPersonagem(String personagem) throws FichaInvalidaException {
        if(Validar.validarNome(personagem)){
            this.personagem = personagem;
        }else{
            throw new FichaInvalidaException("Nome do Personagem esta nulo ou invalido");
        }
    }

    public String getPersonagem() {
        return personagem;
    }

    public final void setTipo(String tipo) throws FichaInvalidaException {
        if( (tipo.toLowerCase().equals("jogador")) || (tipo.toLowerCase().equals("npc")) || (tipo.toLowerCase().equals("monstro")) ){
            this.tipo = tipo;
        }else{
            System.out.println(tipo);
            throw new FichaInvalidaException("Tipo de Ficha invalido, deve ser: jogador, npc ou monstro");
        }
        
    }

    public String getTipo() {
        return tipo;
    }

    public final void setCampanha(String campanha) throws FichaInvalidaException {
        if( (!campanha.equals("")) || (!campanha.equals(" ")) || (campanha != null) ){
            this.campanha = campanha;
        }else{
            throw new FichaInvalidaException("Campanha Invalida, nao pode ser nula");
        }
    }

    public String getCampanha() {
        return campanha;
    }

    public final void setExperiencia(int experiencia) throws FichaInvalidaException {
        try{
            if(experiencia >= 0){
                this.experiencia = experiencia;
            }else{
                throw new FichaInvalidaException("Experiencia invalida, deve ser numero inteiro maior ou igual a zero e diferente de nulo");
            }
        } catch(NumberFormatException e){
            throw new FichaInvalidaException("Experiencia invalida, deve ser numero inteiro maior ou igual a zero e diferente de nulo");
        }
    }

    public int getExperiencia() {
        return experiencia;
    }

    public final void setAtributos(int[] atributos) throws FichaInvalidaException {
        boolean erro = false;
        String atributo[] = new String[8];
        atributo[0] = "Fisico";
        atributo[1] = "Destreza";
        atributo[2] = "Inteligencia";
        atributo[3] = "Vontade";
        atributo[4] = "Percepcao";
        atributo[5] = "Mente";
        atributo[6] = "Mana";
        atributo[7] = "Sorte";
        
        if( (atributos != null) && (atributos.length == 8) ){
            for(int i = 0; i < atributos.length; i++){
                if(atributos[i] < 0){
                    erro = true;
                    throw new FichaInvalidaException("Atributo " + atributo[i] + " invalido, deve ser numero inteiro e maior que zero");
                }
            }
            if(!erro){
                this.atributos = atributos;
            }
        }else{
            throw new FichaInvalidaException("Erro no vetor de Atributos");
        }
    }

    public int[] getAtributos() {
        return atributos;
    }
    
    public final void setJogador(String jogador) throws FichaInvalidaException {
        if(Validar.validarNome(jogador)){
            this.jogador = jogador;
        }else{
            throw new FichaInvalidaException("Nome do Jogador esta nulo ou invalido");
        }
    }

    public String getJogador() {
        return jogador;
    }
       
    @Override
    public String toString() {
        return " Personagem: "+getPersonagem() +
               " Jogador: " +getJogador() + 
               " Experiencia: " +getExperiencia() +
               " Tipo: "+ getTipo() + 
               " Campanha"+ getCampanha();
    }
    
}